class Analex extends Lexer;

options {
	k = 2;
}

tokens {
	//palabras reservadas
	INT = "int";
	VOID = "void";
	RETURN = "return";
	CHAR = "char";
}

	protected NUEVA_LINEA: "\r\n" {newline();};
	BLANCO: (' ' | "\t" | NUEVA_LINEA) {$setType (Token.SKIP);};
	protected DIGITO: '0'..'9';
	protected LETRA: ('A'..'Z') | ('a'..'z');
	ID: (LETRA) ((DIGITO) | (LETRA) | '_')*;
	STRING : DOBLECOMILLAS (options {greedy=false;}:~('['))* DOBLECOMILLAS;
	CARACTER : COMILLA ID COMILLA;
	NUMERO: (DIGITO)+;
	LBRACKET: '[';
	RBRACKET: ']';
	LPARENTESIS: '(';
	RPARENTESIS: ')';
	LLAVEL: '{';
	LLAVER: '}';
	PORCENTAJE: '%';
	DOBLEPORCENTAJE: "%%";
	COMENTARIO: "/*" (options {greedy=false;}:(~('\r') | NUEVA_LINEA))* "*/" {$setType (Token.SKIP);};
	OR: '|';
	ASTERISCO: '*';
	MAS: '+';
	MENOS: '-';
	DOBLEMAS: "++";
	SEPARADOR: ';';
	COMA: ',';
	DOBLECOMILLAS: '"';
	COMILLA: '\'';
	ISLASH: '\\';
	SLASH: '/';
	ASIGNACION: '=';
	OPCIONAL: '?';